/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2006，所有权利保留。
 * 
 * 文件名：	IBPermAgent.java
 * 模块说明：	
 * 修改历史：
 * 2006-9-30 - lxm - 创建。
 */
package com.hd123.rumba.user.biz;

import java.util.List;

import net.sf.hibernate.HibernateException;

import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.runtime.OperateContext;

/**
 * 权限维护代理 | 业务层 | 接口类
 * <p>
 * 
 * 对于一个指定对象（可能是用户或角色）所拥有的权限进行维护的代理对象，其中应该包括有关权限维护的方法。
 * 
 * @author lxm
 * 
 */
public interface IBPermAgent {

  /** 用于描述当前拥有权限集合的对象的uuid。 */
  public String getUserOrRoleUuid() throws BusinessException;

  public void setUserOrRoleUuid(String userOrRoleUuid) throws BusinessException;

  /**
   * 在指定的对象拥有权限集合中取得全局的权限拥有情况。
   * 
   * @return 返回全局的权限拥有情况BPermGroupAssign对象，其中只有关于权限的统计信息不为空。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BPermGroupAssign getGlobalPermGroup() throws BusinessException, HibernateException;

  /**
   * 在指定对象拥有权限集合中取得按构件包功能视图分组的权限拥有情况。<br>
   * 返回的结果中包括空的分组。所谓空的分组，指在对象拥有权限集合中并不拥有其中的任何一个权限。
   * 
   * @return 返回符合条件的权限组赋值列表。若没有符合条件的将返回size()=0的列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<BPermGroupAssign> getCFVPermGroups() throws BusinessException, HibernateException;

  /**
   * 在指定对象拥有权限集合中取得指定构件包功能视图按权限提供者分组的权限拥有情况。<br>
   * 返回的结果中包括空的分组。所谓空的分组，指在对象拥有权限集合中并不拥有其中的任何一个权限。
   * 
   * 
   * @param cfvUuid
   *          指定的构件包功能视图的uuid。
   * @return 返回符合条件的权限组赋值列表。若没有符合条件的将返回size()=0的列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<BPermGroupAssign> getProviderPermGroups(String cfvUuid) throws BusinessException,
      HibernateException;

  /**
   * 在指定对象拥有权限集合中取得指定权限提供者中包含的字段权限或单一权限列表。
   * 
   * @param cfvUuid
   *          指定的构件包功能视图的uuid。
   * @param providerClassName
   *          指定权限提供者类名。
   * @return 返回符合条件的字段或单一权限赋值列表。若没有符合条件的将返回size()=0的列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<BBasePermAssign> getPermissions(String cfvUuid, String providerClassName)
      throws BusinessException, HibernateException;

  /**
   * 执行权限指令。
   * 
   * @param cmds
   *          指定执行的权限修改命令序列。将按照顺序逐条执行。
   * @param operate
   * @param oca
   * @throws BusinessException
   * @throws HibernateException
   */
  public void executeCommandsT(List<BPermissionCommand> cmds, OperateContext operate, long oca)
      throws BusinessException, HibernateException;

}
